package 集合学习.jihe_List.Array_List;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
* 使用ArrayList存储多个学生的分数。（不唯一，索引有序）
* 数组中可以放基本的数据类型，也可以放引用数据类型
* 集合中只能放引用数据类型，不能放基本数据类型：基本数据类型需要包装类进行包装，然后放入集合。
*/
public class TestArrayList {
    public static void main(String[] args) {
        //创建一个集合对象
       // ArrayList list=new ArrayList();     //一种创建的方法
        List<Integer> list = new ArrayList();
        //添加元素
        //list.add();在末尾添加元素
        list.add(80);
        list.add(90);
        list.add(85);
        list.add(80);
        list.add(1,100);
        //在指定的索引位置添加元素，底层发生了大量的后移动=操作，并且可能发生了数组的扩容。

        //元素的数量
        int x=list.size();
        System.out.println("存在有元素个数为--->"+x);

        //获取指定索引的元素
        int y=list.get(1);
        //获取指定索引的值返回是Object型数据（没有进行泛型）
        System.out.println(y);

        //遍历元素
        System.out.println(list.toString());
        //方法一：for循环
        for(int i=0;i< list.size();i++){
            int e = list.get(i);//已经规定了泛型为Integer
            System.out.println(i+"--->"+e);
        }

        //方法二:for-each循环
        for(int e:list){
            System.out.println(e);
        }

        //方法三：Iterator  迭代器
         Iterator it=list.iterator();//返回值是Iterator类型数据
        while(it.hasNext()){//it.hasNext()判断是否还有元素
            int e=(int)it.next();//因为返回值是Iterator类型数据所以需要强转

            System.out.println("===>"+e);
        }

        //方法四: Lambda表达式+流式编程（jdk1.8后）
        System.out.println("===============");
        list.forEach((i)-> System.out.println(i));
        System.out.println("---------------");
        list.forEach(System.out::println);
    }
}
